# 切片数组 存在序列 有序
# 特点：
# 可变序列
# append、insert、remove、pop方法，删除元素
# 支持切片访问和修改列表元素
#  支持切牌呢和修改列表中元素
# 访问和处理速度慢
# 不能作为字典的键值
# 正向递增
import random

s = "hello world python"
for i in range(0, len(s)):
    print(i, s[i], end="\t")
print()
# 反响递减
for i in range(-len(s), -1):
    print(i, s[i], end="\t")

print()
# 序列的切片操作 1、从0开始、8结束、每隔2两个取值
s1 = s[0:8:3]
print(s1)
# 可以省略方式处理
s2 = s[::2]
print(s2)
s3 = s[3:9:]
print(s3)
s4 = s[1::2]
print(s4)
# 步长为负数 字符串逆向处理
print(s[::-1])
print(s[-1:-len(s) - 1:-1])

# 序列
h = 'Hello'
w = 'World'
print(h + w)
# 序列的相乘操作
print("-" * 10)
# 比较
print(h in w)
print(h not in w)
# 根据ashcell值
print(max(h))
print(min(h))
# 获取这个出现的第一个下标
print(h.index('l'))
# 统计这个字母出现的次数
print(h.count('l'))

# 创建数组
lit2 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
print(lit2)
# 使用内置函数创建数组
lit1 = list('hello world')
print(lit1)
# 结合range
lit3 = list(range(-len(s), -1, 2))
print(lit3)
print(lit1 + lit2 + lit3)
print(lit3 * 3)
print(len(lit3))
print(max(lit3))
print(lit3.count("l"))
print(lit3.index(-2))
# 删除数组操作
del lit2
# print(lit2)
print('-' * 20)
# 列表的便利操作
arr = list('hello world')
print(arr)
for item in arr:
    print(item, end='')
# 下标便利
print()
for index in range(0, len(arr), 2):
    print(arr[index], end='')

# enumerate()函数 有序列的便利
print()
for index, item in enumerate(arr, start=10):
    print(index, item, end='  \t')

# 数组中特有操作
lst = []
# append 添加操作
lst.append('马')
lst.append('迪')
lst.append('迪')
print(lst)
# insert 在索引位置增加一个元素
lst.insert(0, '帅')
lst.insert(4, '哥')
print(lst)
# clear 清除list中所有元素
lst.clear()
print(lst)
# pop 删除制定索引
lst = ['马', '迪', '迪', '大', '帅', '哥']
lst.pop(3)
print(lst)
# remove 根据字符删除第一个
lst.remove('迪')
print(lst)
# reverse 元素反转
lst.reverse()
print(lst)
# 考培列表lst元素
lstCopy = lst.copy()
print(lstCopy)
# 修改listCopy中的值
lstCopy[3] = '👵'
print(lstCopy)
# 列表排序的两种方式
# 列表对象的sort方法
# 升序
lstCopy.sort()
print(lstCopy)
# 降序 reverse=True
lstCopy.sort(key=None, reverse=True)
print(lstCopy)
# 内置函数 sorted() 方法
lstSort = sorted(lstCopy, key=None, reverse=False)
print(lstSort)
# 自己指定排序规则
lstCopy.sort(key=str.lstrip, reverse=True)
print(lstCopy)
# 列表的二维数组
# 列表生成式的语法结构
# 幂次方
lstStruct = [item * item for item in range(1, 10)]
print(lstStruct)
# 生成1-100之间的随机数
lstRandom = [random.randint(1, 1000) for _ in range(10)]
print(lstRandom)
# 从列表中找出符合条件的元素组成数组
lstData = [index * item for index, item in enumerate(range(1, 10), start=5)]
print(len(lstData))
print(lstData)
# 便利二维列表
# 创建二维数组
lstCity = [
    ['城市', '环比', '同比'],
    ['西安', 102, 103],
    ['咸阳', 102, 103],
    ['汉中', 102, 103],
]
print(lstCity)
# 便利双层循环
for city in lstCity:
    for item in city:
        print(item, end="\t")
    print()

# 列表生成式生成一个4行5列的二维数组
lstTwoArr = [[index * data for index, data in enumerate(range(5))] for _ in range(4)]
for arr in lstTwoArr:
    for item in arr:
        print(item, end="\t")
    print()

# 数组合并
lst1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
lst2 = [10, 20, 30, 40, 50, 60, 70, 80, 90]
lst3 = zip(lst1, lst2)
print(lst3)
print(list(lst3))
